using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using StockholmsStad.Windows.UI.Modules.Ceremony.Events;
using StockholmsStad.Windows.UI.Modules.Ceremony.Models;
using StockholmsStad.Runtime.Serialization.DataContract;

namespace StockholmsStad.Windows.UI.Modules.Ceremony.Interfaces
{
    public interface ICeremonyService
    {
        event EventHandler<CeremonySummaryPresentationModelEventArgs> GetOrdinaryCeremoniesCompleted;

        DateTime GetPreviousCeremonyDateForIndividualService();
        DateTime GetPreviousCeremonyDateForOrdinaryService();

        ObservableCollection<CeremonySummaryPresentationModel> GetIndividualCeremonies();

        ObservableCollection<CeremonySummaryPresentationModel> GetIndividualCeremonies(DateTime fromDate, DateTime? toDate, int? ministerId);

        ObservableCollection<CeremonyDetailsPresentationModel> GetIndividualCeremonyDetails(DateTime date, int? ministerId);

        ObservableCollection<CeremonySummaryPresentationModel> GetOrdinaryCeremonies();

        //void GetOrdinaryCeremoniesASync();

        ObservableCollection<CeremonySummaryPresentationModel> GetOrdinaryCeremonies(DateTime fromDate, DateTime? toDate, int? ministerId);

        //void GetOrdinaryCeremoniesASync(DateTime fromDate, DateTime? toDate, int? ministerId);

        ObservableCollection<CeremonyDetailsPresentationModel> GetOrdinaryCeremonyDetails(DateTime date);

        List<ValueIdPair> GetCeremonyTypes();

        List<Minister> GetMinisters();

        List<TimeBlock> GetFreeTimeBlockDateTimes(DateTime fromDate, DateTime toDate);

        void UpdateTicketsWithStatus(IEnumerable<CeremonyDetailsPresentationModel> ceremonies);

    }
}
